package Scene
{
	import Objects.GameObject;
	
	import flash.display.Sprite;
	import flash.display.Stage;
	import flash.events.Event;
	
	/**
	 * 游戏基本场景
	 * @author Jian 2011.03.09
	 */
	public class GameScene extends Sprite
	{
		/**
		 * 舞台中的对象列表
		 */
		protected var objectlist:Array;
		/**
		 * 创建游戏基本场景需要传递基本舞台这个参数
		 * @param	_stage   舞台
		 */
		public function GameScene(p_stage:Stage)
		{
			Global.stage = p_stage;
			objectlist = new Array();
			Global.stage.addEventListener(Event.ENTER_FRAME, render);
		}
		
		/**
		 * 向游戏世界中增加新的游戏对象
		 * @param   p_obj
		 */
		public function addObject(p_obj:GameObject):void
		{
			if ( objectlist.indexOf(p_obj) != -1 ){
				return;//不重复添加
			}
			objectlist.push(p_obj);
			addChild(p_obj);
		}
		
		/**
		 * 从游戏世界删除游戏对象
		 * @param  p_obj
		 */
		public function removeObject(p_obj:GameObject):void
		{
			var id:int = objectlist.indexOf(p_obj);
			if ( id == -1 ){
				return;
			}
			objectlist.splice(id, 1);
			removeChild(p_obj);
			p_obj.die();
		}
		
		/**
		 * 渲染函数，通过函数逐个计算游戏中各对象的动作
		 */
		public function render(p_evt:Event):void
		{
			for each( var obj:GameObject in objectlist ){
				obj.Do();
			}
		}
	}
}